package com.foreknow.demo5;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 异常处理：所有的异常(Exception)和错误(Error)的超类是Throwable
 * 1. 错误(Error):一般情况下Error无需程序员处理。比如由于硬件原因造成的程序的出错。物理的问题是无法通过软件来修复的。
 * 2. 异常(Exception)：一般情况下是软件上的逻辑错误，或者是设计的不周全造成的。是可以通过程序进行修复的。
 *    程序员一般处理Exception
 * 3. 异常(Exception)的内部分类
 *     3.1 运行时异常RuntimeException（非检查性异常）: 程序在编译的时候不报错的。无需进行异常处理。但是运行的时候报错。
 *          int[] array = {1,2,3}  array[33] = 12;
 *     3.2 检查性异常(非RuntimeException):要求程序一定要给出处理的办法。否则编译是不能通过的。虽然要求大家强制处理异常，但是异常不一定发生
 * 面试题： 1. 异常的分类？   2. Error和Exception的区别？  3. 运行时异常和检查性异常的区别？  4. 异常处理在项目中如何应用？
 *
 * 4. 异常的声明(throws):也可以称为上报（抛出）异常 public void m1() throws FileNotFoundException{}
 *
 * 5. 如何处理异常？ 目的当异常发生的时候，程序要提供一些异常处理的代码，可以恢复程序的正常执行
 *    基本语法：
 *     try {
 *          有可能产生异常的代码
 *     }catch(异常类型 变量名) {
 *          处理
 *     }finally {
 *         无论try中有没有异常都会执行finally中的语句
 *         在实际应用中可以使用它来释放资源(例如数据库的连接)
 *     }
 *
 *    注意：一个try后面可以写多个catch
 *     try {
 *             excetptionDemo1.m1();
 *         } catch (FileNotFoundException e) {
 *             e.printStackTrace();
 *         } catch (SQLException e) {
 *             e.printStackTrace();
 *         }
 *  6. 自定义异常 ： 可以定义一个类，然后继承Exception或者它的子类。
 *
 */
public class ExcetptionDemo1 {

    /**
     * 异常的声明(throws):也可以称为上报（抛出）异常
     *
     * @throws FileNotFoundException:表示当前m1()方法有可能会产生异常，但是在这个方法中我们可以不处理，谁调用方法由谁来处理异常。
     */
    public void m1()  {
        try {
            FileReader fileReader = new FileReader("");
            DriverManager.getConnection("", "", "");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }
}

